#include <iostream>

class Base
{

};

class Derived:public Base
{

};



int main()
{
/* 静态转换 */
    // //用于在基本数据类型之间转换
    // //void* 和普通指针之间转换
    // //不允许在非同类型指针之间进行转换,(父子指针可以相互转换，没有类型安全见擦汗)
    // int c = 10;
    // void * a = &c;
    // int * g = static_cast<int*>(a);
    // std::cout<<g<<std::endl;

/* 动态转换 */
    //专门用于（有虚函数的即多态）父子指针之间的转换
    // Derived *d = new Derived;
    // Base *b = dynamic_cast<Derived*>(d);
    // //子类指针可以转向父类指针，向上转型是安全的；向下转型是不安全的

    // Base * b = new Base;
    // Derived *d = dynamic_cast<Derived*>(b);

    // //const转换
    // //用于const和非const指针转换
    // int a = 10;
    // const int * b = &a;
    // int * c = const_cast<int*>(b);
    // *c = 20;
    // std::cout<<a<<std::endl;    //输出20

    //强制类型转换
    //任何类型都可以转，和C的强转一样，不够安全
    int a = 10;
    char * b = reinterpret_cast<char*>(a);


    return 0;
}